// @ts-nocheck

import { ProductsDto } from "@/models/ProductsDto";

/**产品 页面扩展方法 */
export class ProductsES {
    /**笛卡尔交集 */
    static Descartes = (array) => {
        if (array.length < 2) return array[0] || [];
        return [].reduce.call(array, function (col, set) {
            var res = [];
            col.forEach(function (c) {
                set.forEach(function (s) {
                    var t = [].concat(Array.isArray(c) ? c : [c]);
                    t.push(s);
                    res.push(t);
                })
            });
            return res;
        });
    }

    /**
     * 转换成渲染表格数据
     * @param rawData 原始属性数据
     * @param descartesData 笛卡尔交集算出来的值
     * @returns 
     */
    static ToRenderTableData(rawData: ProductsDto.ProductsVariants[], descartesData) {
        let renderData = [];
        descartesData.forEach(x => {
            var temp = {
                Id: 0,
                Title: "",
                CompareAtPrice: 0,
                Price: 0,
                InventoryQuantity: 0,
                Option1: "",
                Option2: "",
                Option3: "",
                Image_Id: 0
            }
            if (Array.isArray(x)) {
                var values = [];
                x.forEach((item, index) => {
                    values.push(item.Value);
                    temp[`Option${index + 1}`] = item.Value;
                });
                temp.Title = values.join(" / ");

            } else {
                temp.Title = x.Value;
                temp.Option1 = x.Value;
            }
            renderData.push(temp);
        });

        let rw = [];
        //对比数据 保留原本数据
        renderData.forEach(newItem => {
            //可能是旧的数据保留旧的数据
            let obj = rawData.find(f => f.Title == newItem.Title);
            if (obj != null) {
                rw.push(obj);
            } else {
                rw.push(newItem);
            }
        })
        return rw;
    }
}
